package kr.co.bettersoft.waitnumbercustomer.activity;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import org.json.JSONArray;
import org.json.JSONObject;

import kr.co.bettersoft.waitnumbercustomer.adapter.BusinessKindBtnAdapter;
import kr.co.bettersoft.waitnumbercustomer.adapter.FlowLayout;
import kr.co.bettersoft.waitnumbercustomer.common.CommonConstant;
import kr.co.bettersoft.waitnumbercustomer.common.WaitNumberCustomerRest;
import kr.co.bettersoft.waitnumbercustomer.domain.BusinessKind;
import kr.co.bettersoft.waitnumbercustomer.fragment.FragmentHome;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.OnHierarchyChangeListener;
import android.view.Window;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.RadioGroup;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class SearchStoreOptionActivity extends Activity  
{
	///////////////////////////////////////////////////////////////////////////////////////////////////////
	//변수
	String TAG = "SearchStoreOptionActivity";

	// 폰트
	private Typeface typefaceNanumGothic= null; 
	private Typeface typefaceNanumGothicBold = null;
	
	// 종료 여부. 종료된 경우 스레드 호출로 인한 에러를 방지하기 위함
	Boolean isFinished = false;
	
	// Locale
	Locale systemLocale = null ;
	String strCountry = "" ;				// 국가 코드
	// 서버 통신용
//	WaitNumberCustomerRest waitNumberCustomerRest;
//	String callResult = "";
	
	// 화면 구성
	TextView titleBar;		// 타이틀
	TextView businesskind_subject;
	// 가맹점 명 입력 창
	EditText storeSearchText;

	// 업종 목록 그리드 뷰 방식
	GridView gridView;
	// 아답터
	private BusinessKindBtnAdapter btnAdapter;
	// 업종 목록 동적 버튼 생성하기. 방식
	FlowLayout job_type_buttons_layout;
	Button[] btnWord ;
	String selectedBusinessKindTag = "";		// 선택된 업종명
	int selectedBusinessKindIdx = 0;		// 선택된 업종명
	View currentSelectedView;
	
	String[] selectWorkType;
	// 업종 리스트
	List<BusinessKind> businessKindList;
								
	
	// 하단 조회 버튼
	Button callSearchBtn; 	

	// 상단 닫기 버튼
	Button topNaviCloseBtn; 
	
	// 데이터 전달용 번들과 인텐트
	Bundle extraBundle;
	Intent resultIntent;

	// 키보드 자동 숨기기 위한 부모 레이아웃(리스너 달아서 키보드 숨김)과 입력 매니저
	View parentLayout;
	InputMethodManager imm;		// 키보드 제어
	
	///////////////////////////////////////////////////////////////////////////////////////////////////////////

	// 핸들러
	Handler handler = new Handler(){
		@Override
		public void handleMessage(Message msg){
			Bundle b = msg.getData();
			try{

				// 가져온 업종 목록을 그리드뷰에 뿌려준다.
				if(b.getInt("showBusinessKindGrid")==1){		 
					Log.d(TAG,"showBusinessKindGrid");
					// 최종 결과 배열은 entriesFn 에 저장되어 있다.. 여기 리스트 레이아웃.
					if((businessKindList!=null)&&(businessKindList.size()>0)){
						// 초기 값 저장.
						setGriding();
					}else{
						Log.d(TAG,"no data");
					}
				}
				// 그리드뷰에서 업종 선택시 배경색상을 변경해준다.
				if(b.getInt("gridViewChangeBackgroundColor")==1){	
					for(int i=0; i<gridView.getChildCount(); i++){
						if(i==selectedBusinessKindIdx){
							gridView.getChildAt(i).setBackgroundDrawable(getResources().getDrawable(R.drawable.sub9_9_1_3));
						}else{
							gridView.getChildAt(i).setBackgroundDrawable(getResources().getDrawable(R.drawable.sub9_9_2_3));	
						}
					}
				}
				// 그리드뷰 설정 후 '전체' 버튼을 기본 선택 상태로 바꾼다.
				if(b.getInt("businessKindInitColor")==1){		 
					Log.d(TAG,"businessKindInitColor");
					try{
						selectedBusinessKindTag = "";	// 초기값 ""
						selectedBusinessKindIdx = 0;	// 초기값 0
						gridView.getChildAt(0).setBackgroundDrawable(getResources().getDrawable(R.drawable.sub9_9_1_3));
					}catch(Exception e){}
				}
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	};

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature( Window.FEATURE_NO_TITLE );
		setContentView(R.layout.search_store_option_activity);

//		WaitNumberCustomerRest waitNumberCustomerRest = new WaitNumberCustomerRest();
		
		//사용자 지역
		systemLocale = getResources().getConfiguration().locale;
		strCountry = systemLocale.getCountry();
		Log.d(TAG,"strCountry:"+strCountry);
		
		gridView  = (GridView)findViewById(R.id.gridview);
		
		// 부모 레이아웃 리스너 - 외부 터치 시 키보드 숨김 용도 
		parentLayout = findViewById(R.id.parent_layout);		
		parentLayout.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				hideKeyboard();
			}
		});
		
		
		titleBar = (TextView) findViewById(R.id.title_bar);
		businesskind_subject = (TextView) findViewById(R.id.businesskind_subject);
		// 가맹점 이름으로 검색 - 상호명
		storeSearchText = (EditText)findViewById(R.id.store_search_text);
		
		// 업종 버튼 (동적 생성) 레이아웃
		job_type_buttons_layout = (FlowLayout) findViewById(R.id.job_type_buttons_layout);
		// 하단 조회 버튼
		callSearchBtn = (Button) findViewById(R.id.call_search_btn);
		topNaviCloseBtn = (Button) findViewById(R.id.top_navi_close_btn);
		
		// 폰트 지정.
	    typefaceNanumGothic = Typeface.createFromAsset(getAssets(), CommonConstant.NanumGothic);  
	    typefaceNanumGothicBold = Typeface.createFromAsset(getAssets(), CommonConstant.NanumGothicBold);
		// 폰트 적용
	    titleBar.setTypeface(typefaceNanumGothic); 
//	    storeSearchText.setTypeface(typefaceNanumGothic);	 
	    callSearchBtn.setTypeface(typefaceNanumGothicBold); 
	    businesskind_subject.setTypeface(typefaceNanumGothicBold); 
		
		
		// 하단 조회 버튼 리스너
		callSearchBtn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// 키,벨류를 넣는다
				extraBundle.putString("searchCompanyName",  (storeSearchText.getText()+""));		// 상호명 (가맹점 이름)
				
				// 버튼 방식
				extraBundle.putString("searchBusinessKind03",  selectedBusinessKindTag);		// 업종 (선택된 업종명)
				// 인텐트에 넣는다
				resultIntent.putExtras(extraBundle);
				callSetResult();
			}
		});
		
		// 상단 닫기 버튼
		topNaviCloseBtn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				finish();
			}
		});
		
		// 데이터 전달용 번들을 만든다. 
		extraBundle = new Bundle();
		resultIntent = new Intent();
		
		// 초기값 설정(라디오 버튼에 의한 설정) - 사용자가 그냥 검색 버튼 누르면 기본 조건으로 검색되도록 하기 위함.
		extraBundle.putString("searchAllYn", "Y");					// 전체 검색
		extraBundle.putString("averageTotalRegDateOption", "3");	// 등록순
		extraBundle.putString("searchBusinessKind03", "");			// 업종	// @@ 미구현
		this.setResult(RESULT_CANCELED, resultIntent);	// RESULT_OK 를 돌려주면 부모에서 받아 처리한다.
		
		new backgroundSelectBusinessKindList().execute();			// @@ 		
	}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////	
	
	
///////////////////////////////////////////////////////////////////////////////////////////////////////////	
	/**
	 * setGriding
	 *   데이터를 화면에 세팅한다
	 * @param
	 * @param
	 * @return
	 */
	public void setGriding(){
		Log.d(TAG,"setGriding");
		btnAdapter = new BusinessKindBtnAdapter(this, businessKindList);
		gridView  = (GridView)findViewById(R.id.gridview);
		gridView.setAdapter(btnAdapter);

		// 클릭시  
		gridView.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> parent, View v,
					int position, long id) {
				// 값 저장하기
				if(position==0){
					selectedBusinessKindTag = "";		// 전체 선택 버튼일땐 "" 
				}else{
					selectedBusinessKindTag = businessKindList.get(position).getCONTENT();
				}
				selectedBusinessKindIdx = position;
				gridViewChangeBackgroundColor(selectedBusinessKindIdx);
			}
		});
		businessKindInitColor();
	}
	
	//	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	/**
	 * 러너블. 업종 목록을 가져온다.
	 */
	class RunnableSelectBusinessKindList implements Runnable {
		public void run(){
			new backgroundSelectBusinessKindList().execute();
		}
	}
	/**
	 * backgroundSelectBusinessKindList
	 *  비동기로 업종 목록을 가져온다.
	 *
	 * @param
	 * @param
	 * @return
	 */
	public class backgroundSelectBusinessKindList extends   AsyncTask<Void, Void, Void> {
		@Override protected void onPostExecute(Void result) { 
		}
		@Override protected void onPreExecute() { 
		}
		@Override protected Void doInBackground(Void... params) { 
			Log. d(TAG,"backgroundSelectBusinessKindList");

			// 파라미터 세팅
			BusinessKind businessKindParam = new BusinessKind();
			businessKindParam.setCOUNTRY_CODE(strCountry);
			String callResult = "";
			//			// 호출
			if(FragmentHome.restCallCntUp()){
				if(!isFinished){
					WaitNumberCustomerRest waitNumberCustomerRest = new WaitNumberCustomerRest();
					callResult = waitNumberCustomerRest.RestSelectBusinessKindList(businessKindParam);
					// @@ 
				}
				FragmentHome.restCallCntDown();
				// 결과 처리		 		// 임시로 막음 @@
				if(!(callResult.equals("F"))){ 
					try {
		                JSONArray jsonArray2 = new JSONArray(callResult);
		                int max = jsonArray2.length();
		                try {
		                    businessKindList = new ArrayList<BusinessKind>(max);
		                    if(max>0){
		                        for ( int i = 0; i < max; i++ ){
		                            JSONObject jsonObject = jsonArray2.getJSONObject(i);
		                            BusinessKind businessKindItem =  new BusinessKind();
		                            try{
		                                businessKindItem.setID_CHECKMILEAGE_BUSINESS_KINDS(jsonObject.getString("idCheckMileageBusinessKind"));
		                            }catch(Exception e){
		                                businessKindItem.setID_CHECKMILEAGE_BUSINESS_KINDS("");
		                            }
		                            try{
		                                businessKindItem.setCONTENT(jsonObject.getString("content"));
		                            }catch(Exception e){
		                                businessKindItem.setCONTENT("");
		                            }
		                            try{
		                                businessKindItem.setCOUNTRY_CODE(jsonObject.getString("countryCode"));
		                            }catch(Exception e){
		                                businessKindItem.setCOUNTRY_CODE("");
		                            }
		                            try{
		                                businessKindItem.setLANGUAGE_CODE(jsonObject.getString("languageCode"));
		                            }catch(Exception e){
		                                businessKindItem.setLANGUAGE_CODE("");
		                            }
		                            businessKindList.add(businessKindItem);
		                        }
		                    }
		                }catch(Exception e){
		                	callResult = "F";	
		                    e.printStackTrace();
		                }
		            }catch(Exception e){
		            	callResult = "F";
		                e.printStackTrace();
		            }
				}
				
				if(!(callResult.equals("F"))){ //  성공		
					if(!isFinished){
//						businessKindList = waitNumberCustomerRest.getBusinessKindList();
						List<BusinessKind> businessKindList2 = new ArrayList<BusinessKind>(businessKindList.size()+1);
						BusinessKind firstItem = new BusinessKind();
						firstItem.setCONTENT(getString(R.string.store_search_business_kind_all));
						businessKindList2.add(firstItem);
						if(businessKindList.size()>0){
							for(int i=0; i<businessKindList.size(); i++){
								businessKindList2.add(businessKindList.get(i));
							}
						}
						businessKindList = businessKindList2;
					}
				}
				showList(); 
			}
			return null ;
		}
	}
	//	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	/**
	 * showList
	 *  화면에 데이터 보여준다
	 *
	 * @param 
	 * @param 
	 * @return 
	 */
	public void showList(){
		Log.d(TAG, "showList");
		if(!isFinished){
			runOnUiThread(new Runnable(){		
				@Override
				public void run(){
					Message message = handler.obtainMessage();
					Bundle b = new Bundle();
					b.putInt("showBusinessKindGrid", 1);		// 보여주기2
					message.setData(b);
					handler.sendMessage(message);
				}
			});
		}
	}
	
	/**
	 * businessKindInitColor
	 *  그리드뷰 초기 선택값 배경색.(전체 버튼)
	 *
	 * @param 
	 * @param 
	 * @return 
	 */
	public void businessKindInitColor(){
		Log.d(TAG, "businessKindInitColor");
		if(!isFinished){
			runOnUiThread(new Runnable(){		
				@Override
				public void run(){
					Message message = handler.obtainMessage();
					Bundle b = new Bundle();
					b.putInt("businessKindInitColor", 1);		 
					message.setData(b);
					handler.sendMessage(message);
				}
			});
		}
	}
	/**
	 * gridViewChangeBackgroundColor
	 *  그리드뷰 색상 변경하기
	 *
	 * @param 
	 * @param 
	 * @return 
	 */
	public void gridViewChangeBackgroundColor(final int idx){
		Log.d(TAG, "gridViewChangeBackgroundColor");
		if(!isFinished){
			runOnUiThread(new Runnable(){		
				@Override
				public void run(){
					Message message = handler.obtainMessage();
					Bundle b = new Bundle();
					b.putInt("gridViewChangeBackgroundColor", 1);		 
					b.putInt("idx", idx);		 
					message.setData(b);
					handler.sendMessage(message);
				}
			});
		}
	}
	
	/**
	 * hideKeyboard
	 * 키보드 숨긴다
	 *
	 * @param 
	 * @param 
	 * @return nowTime
	 */
	public void hideKeyboard(){
		imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE );
		imm .hideSoftInputFromWindow(storeSearchText.getWindowToken(), 0);
	}
	
	
	public Context returnThis(){
		return this;
	}
	
	public void callSetResult(){
		this.setResult(RESULT_OK, resultIntent);	// RESULT_OK 를 돌려주면 부모에서 받아 처리한다.
		finish();
	}
	
	@Override
	public void onDestroy(){
		super.onDestroy();
	}
	
	
}